Belirli Adresin Bakiyesini Elde Etme
Python üzerinden projeler yazılırken ilk olarak kullanılacak kütüphanelerin eklenmesi gerekmektedir. Kütüphaneler kullanıcının işini kolaylaştırmak için tasarlanmış ve farklı özelliklere kısa kodlarla erişim sağlayan yazılımlardır. Genellikle kod satırlarının başlarında yazılma nedenleri kod başlangıcında erişimi sağlayarak tüm kod dosyasında kullanımı sağlamaktır.
import requests
Tablo 7
Tablo 7'de eklenen "requests" kütüphanesi http isteklerini tarayıcı olmadan çalıştırmamızı ve bu çalışma sonucu dönen veriyi elde etmemize sağlayan kütüphanedir. "url" kullanarak yapılan sorguyu json verisine dönüştürür.
def AdresBakiyesiniAl(ApiAnahtarı, Zincir\_Numarası, Adres, Fiat): URL = "https://api.covalenthq.com" + "/v1/" + Zincir\_Numarası + "/address/" + Adres + "/balances\_v2/"+ "?quote-currency=" + Fiat + "&key=" + ApiAnahtarı
Tablo 8
Tablo 8'de ilk fonksiyon ile karşılaşılmaktadır. Bu fonksiyon, içerisine 4 adet parametre alır. Bu parametreleri sonrasında hemen altında bulunan URL yapısına yerleştirir. Parametrelere bakacak olursak;
- ApiAnahtarı: Siteye kayıt olurken oluşturduğumuz API anahtarıdır. Her hesaba özeldir. Fonksiyon çalışırken bu anahtar ile API'ye bağlanır ve sorgu alır. API anahtarında herhangi bir sorun yoksa veriyi onaylar ve gönderir.
- Zincir_Numarası: Covalent API birden fazla blok zincirde tek API kullanılarak veri çekmeyi amaçlayan bir yazılımdır. Bu şekilde farklı zincirlerle çalışırken Covalent her birine bir id yani numara atar. Bu numarayı belirtmemiz halinde hangi zincirde çalışacağımız belirlenir. (Örneğin; ETH: 1, Matic: 137 vb.)
- Adres: Bu parametre yaptığımız aramanın temel parametresi olmaktadır. Belirlenen adresin bakiyesini alırken zincir içerisinde doğru adresin kullanıldığına emin olmak gerekmektedir. Bunun nedeni bir zincir üzerinde anlamlı olan bir adresin farklı bir zincirde anlamsız olmasıdır.
- Fiat: Fiat parametresi kur birimine karşılık gelmektedir. Yaptığımız sorgularda görüntülenen bakiyenin hangi birimden hesaplanması istenildiği sorgulanır. Örneğin TRY şeklinde parametre girilmesi durumunda bakiye o anlık TRY kuruna bölünerek karşılığı bulunur.
Fonksiyon değişkeni olarak aldığımız bu parametreler hemen altındaki URL değişkenine eklenmektedir. Değişkene eklenirken kullanılan işlem string değişkeni içinde toplamadır. "+" operatörü ile eklenen bu stringler boşluksuz bir URL oluşturur.
istek = requests.get(URL) hamverim = istek.json() verim = hamverim ["data"]
Tablo 9
Tablo 9'da Tablo 7'de eklenilen kütüphanenin "get" metodu kullanılmaktadır. "get" metodu içerisine url değişkenini almakta ve site çıktısını "istek" değişkenine atamaktadır. Sonrasında istek değişkeni ".json()" ile JSON formatına çevrilmektedir. JSON verisi olarak alındıktan sonra veri çekme işlemi tamamlanmaktadır. Çektiğimiz veriyi "hamveri" değişkeni ile kaydetmekteyiz. Bu değişken sözlük formatındadır. "hamveri" sözlüğü içerisinden "data" anahtarına erişilmektedir. Erişilen bu anahtar "verim" değişkenine atanır. Sonrasında parçalanacak değişken bu olmaktadır.
Adresim = verim["address"] SonGüncelleme = verim["updated\_at"] BirSonrakiGüncelleme = verim["next\_update\_at"] ParaBirimi = verim["quote\_currency"] ZincirId = verim["chain\_id"] İtemlerim = verim["items"]
Tablo 10
Tablo 10'da alınan veriyi anlamlandırılabilecek parametrelere çevirme işlemi gelmektedir. Seçilen parametrelere göre alınan verilerin ortak başlıkları bulunmaktadır. Bu başlıklar cüzdandaki her birim için ortaktır. Başlıklar incelenirse:
- Adresim değişkeni veri içerisinden "address" anahtarına erişmektedir. Eriştiği bu anahtar ile hesabın adresi görüntülenir.
- SonGüncelleme değişkeni veri içerisinden "updated_at" anahtarına erişmektedir. Bu anahtar ile hesap içerisinde yapılan son güncellemenin tarihi görüntülenmektedir.
- BirSonrakiGüncelleme değişkeni veri içerisinden "next_update_at" anahtarına erişmektedir. Eriştiği bu anahtar ile hesap içerisinde yapılacak bir sonraki güncellemeyi görüntülemektedir.
- ParaBirimi değişkeni veri içerisinden "quote_currency" anahtarına erişmektedir. Bu anahtar ile kur hesaplamalarında kullanılması için seçilecek para birimi görüntülenmektedir.
- ZincirId değişkeni veri içerisinden "chain_id" anahtarına erişmektedir. Erişilen bu anahtar ile hangi blok zincirde çalıştığımız görüntülenmektedir.
- İtemlerim değişkeni veri içerisinden "items" anahtarına erişmektedir. Bu anahtar veri içerisinde istenilen para birimleri verisini barındırmaktadır. Sözlük formatındadır. Sonrasında bu sözlük içerisindeki veriler ayrıca görüntülenecektir.
liste = [] liste.append("Adresim: " + str(Adresim)) liste.append("Son Güncelleme: "+ str(SonGüncelleme)) liste.append("Bir Sonraki Güncelleme: " + str(BirSonrakiGüncelleme)) liste.append("Para Birimi: " + str(ParaBirimi)) liste.append("Zincir Id: " + str(ZincirId))
Tablo 11
Tablo 11'de veri kullanılacak hale getirilmesi için oluşturulan listeye eklenmektedir. İlk satırda boş bir liste olarak "liste" tanımlanır. Sonrasında sıra ile öncesinde kaydedilen değişkenler string formatına çevrilip başına uygun başlık eklenir. Bu şekilde veri hem Türkçe olmakta hem de projelerde kullanıma hazır hale gelmektedir.
index = 1 for item in İtemlerim: KontratOndalığı = ["Index numarası: " + str(index),"Kontrat Ondalığı: " + str(item["contract\_decimals"])]
KontratAdı = ["Index numarası: " + str(index),"Kontrat Adı: " + str(item["contract\_name"])]
KontratSembolü = ["Index numarası: " + str(index), "Kontrat Sembolü: " + str(item["contract\_ticker\_symbol"])]
KontratAdresi = ["Index numarası: " + str(index),"Kontrat Adresi: " + str(item["contract\_address"])]
DesteklenenERC = ["Index numarası: " + str(index),"DesteklenenERC: " + str(item["supports\_erc"])]
LogoUrl = ["Index numarası: " + str(index),"Logo Url: " + str(item["logo\_url"])]
Tipi = ["Index numarası: " + str(index),"Tipi: " + str(item["type"])]
Bakiye = ["Index numarası: " + str(index),"Bakiye: " + str(item["balance"])]
Son24SaattekiBakiye = ["Index numarası: " + str(index),"Son 24 Saatteki Bakiye: " + str(item["balance\_24h"])]
FiatOranı = ["Index numarası: " + str(index),"Fiat Oranı: "+ str(item["quote\_rate"])]
FiatKarşılığı = ["Index numarası: " + str(index),"Fiat Karşılığı: " + str(item["quote"])]
Nftİçeriği = ["Index numarası: " + str(index),"Nft İçeriği: " + str(item["nft\_data"])]
Tablo 12
Tablo 12'de "for" döngüsü ile karşılaşılmaktadır. Bu döngünün hemen öncesinde "index" adında bir integer değeri almaktadır. Artık anlamlandırılan veriler genel başlıktan ziyade her para birimine özgüdür. Bu nedenle her bir para birimine index numarası verilmesi verinin okunmasını kolaylaştırmaktadır. Alt satırında ise for döngüsünün döngü değişkeni ve yapılma yeri ile karşılaşılmaktadır. Öncesinde bahsedilen itemlerim listesinden her bir iteme aşağısında bulunan işlemler uygulanır. Bu işlemler incelenecek olursa öncelikle her başlık için içerisinde bulunulan para birimi daha kolay anlamlandırılması için index numarası verilmektedir. İndex numarasını verdikten sonra "item" listesi içerisinden istenilen anahtarı çağırarak uygun değişkene sonradan kullanmak veya listeye eklemek amacıyla kaydedilmektedir.
liste.append(KontratOndalığı) liste.append(KontratAdı) liste.append(KontratSembolü) liste.append(KontratAdresi) liste.append(DesteklenenERC) liste.append(LogoUrl) liste.append(Tipi) liste.append(Bakiye) liste.append(Son24SaattekiBakiye) liste.append(FiatOranı) liste.append(FiatKarşılığı) liste.append(Nftİçeriği) index += 1
Tablo 13
Tablo 13'de hali hazırda bulunan for döngüsü içerisinde bir sonraki işlem her bir değişkeni listeye eklemektir. Bu işlemin sonunda index numarası bir arttırılıp for döngüsü sonlandırılır. Eğer "temlerim" listesinde farklı bir eleman varsa index numarası bir arttırılmışken for döngüsü yeniden çalışır ve uygun formatta veriyi listeye ekler.
for i in liste: print(i)
Tablo 14
Veri listeye uygun bir şekilde eklenmiştir ve projelerde kullanıma hazırdır. Ancak veri henüz görselleştirilmemiştir. Bu nedenle Tablo 14'de liste içerisindeki her bir veri for döngüsü ile konsola yazdırılmaktadır.
return liste
Tablo 15
Fonksiyon Tablo 15 ile tamamlanır ve kullanıma hazır hale gelir. Fonksiyon çıktısı olarak return metodu ile "liste" değişkeni atanmaktadır.
def AdresBakiyesiniAl(ApiAnahtarı, Zincir\_Numarası, Adres, Fiat): URL = "https://api.covalenthq.com" + "/v1/" + Zincir\_Numarası + "/address/" + Adres + "/balances\_v2/"+ "?quote-currency=" + Fiat + "&key=" + ApiAnahtarı istek = requests.get(URL) verim = (istek.json()) verim = verim["data"]
Adresim = verim["address"] SonGüncelleme = verim["updated\_at"] BirSonrakiGüncelleme = verim["next\_update\_at"] ParaBirimi = verim["quote\_currency"] ZincirId = verim["chain\_id"] İtemlerim = verim["items"] liste = [] liste.append("Adresim: " + str(Adresim)) liste.append("Son Güncelleme: "+ str(SonGüncelleme)) liste.append("Bir Sonraki Güncelleme: " + str(BirSonrakiGüncelleme)) liste.append("Para Birimi: " + str(ParaBirimi)) liste.append("Zincir Id: " + str(ZincirId)) index = 1 for item in İtemlerim: KontratOndalığı = ["Index numarası: " + str(index),"Kontrat Ondalığı: " + str(item["contract\_decimals"])] KontratAdı = ["Index numarası: " + str(index),"Kontrat Adı: " + str(item["contract\_name"])] KontratSembolü = ["Index numarası: " + str(index), "Kontrat Sembolü: " + str(item["contract\_ticker\_symbol"])] KontratAdresi = ["Index numarası: " + str(index),"Kontrat Adresi: " + str(item["contract\_address"])] DesteklenenERC = ["Index numarası: " + str(index),"DesteklenenERC: " + str(item["supports\_erc"])] LogoUrl = ["Index numarası: " + str(index),"Logo Url: " + str(item["logo\_url"])] Tipi = ["Index numarası: " + str(index),"Tipi: " + str(item["type"])] Bakiye = ["Index numarası: " + str(index),"Bakiye: " + str(item["balance"])] Son24SaattekiBakiye = ["Index numarası: " + str(index),"Son 24 Saatteki Bakiye: " + str(item["balance\_24h"])] FiatOranı = ["Index numarası: " + str(index),"Fiat Oranı: "+ str(item["quote\_rate"])] FiatKarşılığı = ["Index numarası: " + str(index),"Fiat Karşılığı: " + str(item["quote"])] Nftİçeriği = ["Index numarası: " + str(index),"Nft İçeriği: " + str(item["nft\_data"])] liste.append(" ") liste.append(KontratOndalığı) liste.append(KontratAdı) liste.append(KontratSembolü) liste.append(KontratAdresi) liste.append(DesteklenenERC) liste.append(LogoUrl) liste.append(Tipi) liste.append(Bakiye) liste.append(Son24SaattekiBakiye) liste.append(FiatOranı) liste.append(FiatKarşılığı) liste.append(Nftİçeriği) index += 1 print("") for i in liste: print(i) return liste
Tablo 16
Tablo 16'da kodun tamamı ifade edilmiştir. Yapılan işlemlere sırası ile bakılacak olunursa öncelikle fonksiyon parametresi olarak girilen değerler ile URL yapısı oluşturulur ve eklenen kütüphane ile sorgusu yapılarak veri ham bir halde kaydedilir. Sonrasında her işlem için aynı olan değerler uygun anahtar ile erişilerek listeye eklenir. Devamında her işlem için ayrı olan değerler for döngüsü içerisinde item değişkeni ve index ataması ile uygun başlıklar ile değişkene atanarak listeye eklenir. İndex arttırılır ve döngü başına gelinir. Her işlem kaydedildikten sonra tüm işlemler for döngüsü yardımıyla ekrana yazdırılır. Son olarak da fonksiyon çıktısı olarak "liste" değişkeni döndürülür ve fonksiyon tamamlanır.
Adresim: 0x52bc44d5378309ee2abf1539bf71de1b7d7be3b5 Son Güncelleme: 2021-08-07T22:35:24.191712323Z Bir Sonraki Güncelleme: 2021-08-07T22:40:24.191712583Z Para Birimi: TRY Zincir Id: 1 ['Index numarası: 1', 'Kontrat Ondalığı: 18'] ['Index numarası: 1', 'Kontrat Adı: Ether'] ['Index numarası: 1', 'Kontrat Sembolü: ETH'] ['Index numarası: 1', 'Kontrat Adresi: 0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee'] ['Index numarası: 1', 'DesteklenenERC: None'] ['Index numarası: 1', 'Logo Url: https://logos.covalenthq.com/tokens/0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee.png'] ['Index numarası: 1', 'Tipi: cryptocurrency'] ['Index numarası: 1', 'Bakiye: 3054005612066096276661'] ['Index numarası: 1', 'Son 24 Saatteki Bakiye: None'] ['Index numarası: 1', 'Fiat Oranı: 26081.283'] ['Index numarası: 1', 'Fiat Karşılığı: 79652384.0'] ['Index numarası: 1', 'Nft İçeriği: None'] ['Index numarası: 2', 'Kontrat Ondalığı: 18'] ['Index numarası: 2', 'Kontrat Adı: OMGToken'] ['Index numarası: 2', 'Kontrat Sembolü: OMG'] ['Index numarası: 2', 'Kontrat Adresi: 0xd26114cd6ee289accf82350c8d8487fedb8a0c07'] ['Index numarası: 2', "DesteklenenERC: ['erc20']"] ['Index numarası: 2', 'Logo Url: https://logos.covalenthq.com/tokens/0xd26114cd6ee289accf82350c8d8487fedb8a0c07.png'] ['Index numarası: 2', 'Tipi: cryptocurrency'] ['Index numarası: 2', 'Bakiye: 478312093801852306176'] ['Index numarası: 2', 'Son 24 Saatteki Bakiye: None'] ['Index numarası: 2', 'Fiat Oranı: 43.339283'] ['Index numarası: 2', 'Fiat Karşılığı: 20729.703'] ['Index numarası: 2', 'Nft İçeriği: None'] ... ... ... ['Index numarası: 32', 'Kontrat Ondalığı: 18'] ['Index numarası: 32', 'Kontrat Adı: YunJiaMi.Com 免费交易Free Exchange'] ['Index numarası: 32', 'Kontrat Sembolü: YunJiaMi.Com 免费交易Free Exchange'] ['Index numarası: 32', 'Kontrat Adresi: 0xda63a8f9b33e3c927e8ce66606913be1821f67de'] ['Index numarası: 32', "DesteklenenERC: ['erc20']"] ['Index numarası: 32', 'Logo Url: https://logos.covalenthq.com/tokens/0xda63a8f9b33e3c927e8ce66606913be1821f67de.png'] ['Index numarası: 32', 'Tipi: cryptocurrency'] ['Index numarası: 32', 'Bakiye: 7777777000000000000000000'] ['Index numarası: 32', 'Son 24 Saatteki Bakiye: None'] ['Index numarası: 32', 'Fiat Oranı: None'] ['Index numarası: 32', 'Fiat Karşılığı: 0.0'] ['Index numarası: 32', 'Nft İçeriği: None'] ['Index numarası: 33', 'Kontrat Ondalığı: 8'] ['Index numarası: 33', 'Kontrat Adı: OPEN Chain'] ['Index numarası: 33', 'Kontrat Sembolü: OPENC'] ['Index numarası: 33', 'Kontrat Adresi: 0xaf4884622fdc0dd436bd229852ae06be8713c4f6'] ['Index numarası: 33', "DesteklenenERC: ['erc20']"] ['Index numarası: 33', 'Logo Url: https://logos.covalenthq.com/tokens/0xaf4884622fdc0dd436bd229852ae06be8713c4f6.png'] ['Index numarası: 33', 'Tipi: cryptocurrency'] ['Index numarası: 33', 'Bakiye: 869070000'] ['Index numarası: 33', 'Son 24 Saatteki Bakiye: None'] ['Index numarası: 33', 'Fiat Oranı: None'] ['Index numarası: 33', 'Fiat Karşılığı: 0.0'] ['Index numarası: 33', 'Nft İçeriği: None'] ... ... ...
['Index numarası: 68', 'Kontrat Ondalığı: 18'] ['Index numarası: 68', 'Kontrat Adı: DA$'] ['Index numarası: 68', 'Kontrat Sembolü: DA$'] ['Index numarası: 68', 'Kontrat Adresi: 0x48c7cdadb1313076efdac3fdfb8427b4f58c5b7f'] ['Index numarası: 68', "DesteklenenERC: ['erc20']"] ['Index numarası: 68', 'Logo Url: https://logos.covalenthq.com/tokens/0x48c7cdadb1313076efdac3fdfb8427b4f58c5b7f.png'] ['Index numarası: 68', 'Tipi: cryptocurrency'] ['Index numarası: 68', 'Bakiye: 40000000000000000000'] ['Index numarası: 68', 'Son 24 Saatteki Bakiye: None'] ['Index numarası: 68', 'Fiat Oranı: None'] ['Index numarası: 68', 'Fiat Karşılığı: 0.0'] ['Index numarası: 68', 'Nft İçeriği: None'] ['Index numarası: 69', 'Kontrat Ondalığı: 18'] ['Index numarası: 69', 'Kontrat Adı: Universal Bonus Token | t.me/bubbletonebot'] ['Index numarası: 69', 'Kontrat Sembolü: UBT'] ['Index numarası: 69', 'Kontrat Adresi: 0x8e4fbe2673e154fe9399166e03e18f87a5754420'] ['Index numarası: 69', "DesteklenenERC: ['erc20']"] ['Index numarası: 69', 'Logo Url: https://logos.covalenthq.com/tokens/0x8e4fbe2673e154fe9399166e03e18f87a5754420.png'] ['Index numarası: 69', 'Tipi: cryptocurrency'] ['Index numarası: 69', 'Bakiye: 10000000000000000000'] ['Index numarası: 69', 'Son 24 Saatteki Bakiye: None'] ['Index numarası: 69', 'Fiat Oranı: None'] ['Index numarası: 69', 'Fiat Karşılığı: 0.0'] ['Index numarası: 69', 'Nft İçeriği: None']
Tablo 17
Tablo 17'de örnek bir kod çıktısı verilmiştir.